package com.qf;

import com.qf.mapper.EmpMapper;
import com.qf.pojo.Emp;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;

/**
 *
 * Mybatis 添加  修改  删除  查询 （复杂）
 * @author lixu
 */
public class MybatisCRUD {
    //声明
    SqlSessionFactory sqlSessionFactory = null;
    /**
     * Junit单元测试 公共代码提取
     */
    @Before
    public void before() throws Exception{

        //1:Mybatis使用的 23种设计模式中 工厂模式
        //1.1材料
        String resource = "mybatis-config.xml";
        //1.2 将上面的文件成流
        InputStream resourceAsStream = Resources.getResourceAsStream(resource);
        //1.3:构建工厂对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder =
                new SqlSessionFactoryBuilder();
        //2：工厂对象
        sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);

    }


    /**
     * 添加
     *    主键回填
     *    提交订单：
     *      -- 1、订单表    保存订单  订单ID 自增长的方式生成一个订单ID
     *         2、订单详情表  需要上面订单表ID  作为外键
     *         3、删除购物车
     */
    @Test
    public void insert(){
        //3:SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4:接口
        EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);

        Emp emp = new Emp();
        emp.setName("张3");
        emp.setAge(22);

        //添加
        int i = empMapper.insert(emp);//Ctrl + alt + v
        //将保存的ID 返回来
        System.out.println("返回来的ID：" + emp.getId());
        //int j = empMapper.insert(emp);//Ctrl + alt + v

        //添加

        System.out.println("影响的行数:" + i);
        sqlSession.commit();
        //sqlSession.rollback();
        sqlSession.close();

    }

    /**
     * 删除
     */
    @Test
    public void delete(){
        //3:SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4:接口
        EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);

        Integer id = 7;
        empMapper.delete(id);

        sqlSession.commit();
        sqlSession.close();

    }
    /**
     * 修改
     */
    @Test
    public void update(){
        //3:SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4:接口
        EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
        Emp emp = new Emp();
        emp.setId(2);
        emp.setName("王器器");
        emp.setAge(12);

        empMapper.update(emp);

        sqlSession.commit();
        sqlSession.close();

    }
}
